# _*_ coding: UTF-8 _*_
# @Time     : 2021/10/29 14:33
# @Author   : 郑鲁明
# @Site     : http://www.hzdledu.cn/
# @File     : w1s2_元素的查找与定位.py
# @Software : PyCharm

from selenium import webdriver
import time

# 元素的查找
from selenium.webdriver.support.expected_conditions import element_selection_state_to_be


def foo0():
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get('https://www.baidu.com/')

    # 找单个元素
    element = driver.find_element_by_id('kw')
    # element = driver.find_element(By.ID,'kw')
    # element.send_keys('双十一买什么')
    time.sleep(2)

    driver.quit()


# 1.元素的定位
# 通过ID属性定位：最推荐的定位方式，id一般是唯一的，最快的定位方式，但是不是所有元素都有ID属性
def foo1():
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get('https://www.baidu.com/')

    # 找单个元素
    element = driver.find_element_by_id('kw')  # 通过ID定位搜索输入框
    # element = driver.find_element(By.ID,'kw')
    element.send_keys('双十一买什么')
    time.sleep(2)

    driver.quit()


# 2.通过name:属性定位
def foo2():
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get('https://www.baidu.com/')

    # 找单个元素
    element = driver.find_element_by_name('wd')
    element.send_keys('双十一买什么')
    time.sleep(2)

    driver.quit()

# 3.通过link text定位：只针对<a>,通过链接的文本定位
def foo3():
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get('https://www.baidu.com/')
    driver.find_element_by_link_text('新闻').click()  # 模拟鼠标左键单击
    time.sleep(2)

    driver.quit()


# 4.通过partial link text定位：只针对<a>，通过链接的部分文本定位
def foo4():
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get('https://www.baidu.com/')
    driver.find_element_by_partial_link_text('hao').click()  # 模拟鼠标左键单击
    time.sleep(2)

    driver.quit()


# 5.通过class name 定位：通过class属性值定位，一般用于定位多个元素
def foo5():
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get('https://www.baidu.com/')
    elements = driver.find_elements_by_class_name('mnav')  # 获取所有class属性为'mnav'的元素列表
    for element in elements:
        print(element.text)  # 获取元素的text
    time.sleep(2)

    driver.quit()


# 6.通过tag name定位：通过标签的名字定位，一般用于定位多个元素
def foo6():
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get('https://www.baidu.com/')

    elements = driver.find_elements_by_tag_name('a')
    for element in elements:
        print(element.text)  # 获取元素的text
    time.sleep(2)

    driver.quit()


# 7.通过css selector定位：通过css选择器定位
def foo7():
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get('https://www.baidu.com/')
    driver.find_element_by_css_selector('#s_side_wrapper > div.side-entry.aging-entry > div.aging-entry-inner').click()

    time.sleep(2)

    driver.quit()

# 8.通过xpath定位：最强大的定位方式，也是最慢的
def foo8():
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get('https://www.baidu.com/')

    driver.find_element_by_xpath('//*[@id="s-top-left"]/a[5]').click()
    time.sleep(2)
    driver.quit()




if __name__ == '__main__':
    # foo0()
    # foo1()
    # foo2()
    # foo3()
    # foo4()
    # foo5()
    # foo6()
    foo7()
    # foo8()